# encoding:utf-8
'''
@author : xaing
@time : 2019/4/2 11:48
@地址 : 广州
@作用 : ssh 连接
@结果 :
'''

# 登录Linux系统用到的包
import paramiko
from version1 import common


def connectSSH(ip, user, password, port):
    '''
    连接SSH,返回一个连接对象
    :param ip: 远程主机的IP地址
    :param user: 用户名
    :param password: 密码
    :param port: 端口
    :return: 连接对象
    '''
    if common.checkNull(ip):
        raise Exception("远程主机IP地址 不能为空")
    if common.checkNull(user):
        raise Exception("用户名 不能为空")
    if common.checkNull(password):
        raise Exception("密码 不能为空")
    if common.checkNull(port):
        raise Exception("主机端口 不能为空，默认端口为22")

    connect = None
    try:
        # 创建连接
        connect = paramiko.SSHClient()
        # 第一次ssh远程时会提示输入yes或者no
        connect.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        # 密码方式远程登录
        connect.connect(ip, port, username=user, password=password, timeout=30)

    except Exception as e:
        raise Exception("连接:" + ip + ":" + port + " 失败，错误原因:" + common.outStr(e))

    return connect



def exec(connect, order):
    '''
    执行命令
    :param connect: SSH连接
    :param order: 待执行的命令
    :return: 命令的结果信息
    '''
    if connect is None:
        raise Exception("SSH连接已断开，请重连")

    # 执行命令
    stdin, stdout, stderr = connect.exec_command(order)
    # 获取命令执行结果,返回的数据是一个list
    result = stdout.readlines()
    return result



def colse(connect):
    '''
    关闭SSH连接
    :param connect: SSH连接
    :return:
    '''
    if connect is not None:
        connect.close()


def downFile(ip, port, user, password, fromFile, toFile):
    '''
    链接服务器进行文件下载
    :param ip: ip地址
    :param port: 端口
    :param user: 用户名
    :param password: 密码
    :param fromFile: 要下载的文件位置 /usr/local/tomcat8/logs/1.txt
    :param toFile: 文件放到哪去  E:\\kaiFa\\python\\common\\sql\\2.txt
    :return:
    '''
    if common.checkNull(ip):
        raise Exception("远程主机IP地址 不能为空")
    if common.checkNull(user):
        raise Exception("用户名 不能为空")
    if common.checkNull(password):
        raise Exception("密码 不能为空")
    if common.checkNull(port):
        raise Exception("主机端口 不能为空，默认端口为22")
    if common.checkNull(fromFile):
        raise Exception("要下载的文件位置 不能为空")
    if common.checkNull(toFile):
        raise Exception("文件下载后存储位置 不能为空")

    transport = paramiko.Transport(ip, port)

    try:
        transport.connect(username= user, password= password)
        sftp = paramiko.SFTPClient.from_transport(transport)
        sftp.get(fromFile, toFile)
    except Exception as e:
        raise Exception("连接SSH失败，无法下载，失败原因:" + common.outStr(e))
    finally:
        transport.close()



def uploadFile(ip, port, user, password, fromFile, toFile):
    '''
    链接服务器进行文件上传
    :param ip: ip地址
    :param port: 端口
    :param user: 用户名
    :param password: 密码
    :param fromFile: 要上传的文件位置
    :param toFile: 文件放到哪去
    :return:
    '''
    if common.checkNull(ip):
        raise Exception("远程主机IP地址 不能为空")
    if common.checkNull(user):
        raise Exception("用户名 不能为空")
    if common.checkNull(ip):
        raise Exception("密码 不能为空")
    if common.checkNull(ip):
        raise Exception("主机端口 不能为空，默认端口为22")
    if common.checkNull(fromFile):
        raise Exception("要上传的文件位置 不能为空")
    if common.checkNull(toFile):
        raise Exception("文件上传后存储位置 不能为空")

    transport = paramiko.Transport(ip, port)

    try:
        transport.connect(username= user, password= password)
        sftp = paramiko.SFTPClient.from_transport(transport)
        sftp.put(fromFile, toFile)
    except Exception as e:
        raise Exception("连接SSH失败，无法上传，失败原因:" + common.outStr(e))
    finally:
        transport.close()


# uploadFile("192.168.0.83", 22, "root", "yunjisoft66", "E:\\kaiFa\\python\\common\\sql\\1.txt", "/usr/local/tomcat8/logs/1.txt")
# 需要对参数进行检测，必须是文件
downFile("192.168.0.83", 22, "root", "yunjisoft66", "/usr/local/tomcat8/logs/1.txt", "E:\\kaiFa\\python\\common\\sql\\2.txt")




def temp():

    connect = connectSSH("192.168.0.83", "root", "yunjisoft66", 22)

    # 获取到tomcat的pid
    getTomcatPid =  "ps -ef | grep tomcat8/ | grep -v grep | awk '{print $2}'"

    tomcatPid = exec(connect, getTomcatPid)

    # 干掉pid
    kill = "kill -9 " + tomcatPid

    # 得到tomcat下的应用
    listApp = "ls /usr/local/tomcat8/webapps/"

    # 选择要处理的文件

    # 增量还是全量

    # 是否备份到本地

    # 检测备份位置是否存在，不存在则创建
    # 复制指定的包到备份目录
    mv = "mv"

    # 上传文件到tomcat目录下

    # 启动tomcat

    # 校验tomcat是否启动

    # 监控tomcat信息

